package dice.sinanya.listener;

import com.forte.qqrobot.anno.depend.Beans;
import com.forte.qqrobot.sender.intercept.SendContext;
import com.forte.qqrobot.sender.intercept.SenderSendIntercept;
import org.nlpcn.commons.lang.util.StringUtil;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;

@Beans
public class SenderMake implements SenderSendIntercept {
    @Override
    public boolean intercept(SendContext context) {
        final Method method = context.getMethod();
        // 私聊应该就是这个
        if (method.getName().contains("PrivateMsg")) {
            String msg = (String) context.getParams()[1];
            String code = (String) context.getParams()[0];
            for (String tmp : makeMsg(msg)) {
                context.SENDER.sendPrivateMsg(code, tmp);
            }
            return false;
        } else {
            return true;
        }
    }

    private ArrayList<String> makeMsg(String msg) {
        ArrayList<String> result = new ArrayList<>();
        if (msg.contains("\n\n")) {
            return new ArrayList<>(Arrays.asList(msg.split("\n\n")));
        } else if (msg.split("\n").length > 15) {
            String[] msgList = msg.split("\n");
            ArrayList<String> tmp = new ArrayList<>();
            for (int i = 0; i < msgList.length; i++) {
                tmp.add(msgList[i]);
                if (i == (msgList.length - 1) || tmp.size() == 15) {
                    result.add(StringUtil.joiner(tmp, "\n"));
                    tmp = new ArrayList<>();
                }
            }
            return result;
        } else if (msg.length() > 500) {
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < msg.length(); i++) {
                stringBuilder.append(msg.charAt(i));
                if (stringBuilder.length() > 100 || i == (msg.length() - 1)) {
                    result.add(stringBuilder.toString());
                    stringBuilder = new StringBuilder();
                }
            }
            return result;
        } else {
            result.add(msg);
            return result;
        }
    }
}
